package com.leenmvc.core.annotation;

import com.leenmvc.core.enums.FillType;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 非表字段从外表查询内容并填充
 *
 */
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface FillField {

    /**
     * 0 表示 关联外表的一个字段
     * 1 表示 关联外表的一条记录（实体）一对一
     * 2 表示 关联外表的多条记录(实体)  一对多
     *
     * @return
     */
    FillType type() default FillType.ONE_FIELD_IN;

    /**
     * 查询哪个外实体进行查询
     *
     * @return
     */
    Class<?> entity();

    /**
     * 外实体哪个字段
     *
     * @return
     */
    String outField() default "";

    /**
     * 通过内部实体的哪个字段进行查询
     * @return
     */
    String inField();

    /**
     * 联查条件（通过次表的那个字段作为连接条件，默认时值为id）
     * tb_car Car LEFT JOIN tb_device Device ON Car.equ_num = Device.device_num
     * @return
     */
    String outCondition() default "id";

    /**
     * 是否默认查询出来这个字段
     *
     * @return
     */
    boolean defaultQueryIt() default false;

}
